
package JavaDemo;

/**
 * @作者 Administrator
 * @创建日期2015-4-14
 * @版本 java.lang.Queue队列 先进先出
 */

public class QueueArray {


	private int maxSize; //队列长度，由构造函数初始化
    private Object[] queue; // 队列
    private int front; //队头
    private int rear; //队尾
    
   
	
 
    public QueueArray(int size)           // 构造函数
       {
       this.maxSize = size;//队列的初始化长度
       this.queue = new Object[size];//初始化队列数组
       this.front = -1;//初始化头指针
       this.rear = -1;//初始化尾指针
      
       }
    /* 队列元素的入队是在队尾进行的，所以进行入队操作要改变尾指针(rear),出队前先将尾指针向后
         移动一个位置，然后再将该元素插入到该位置*/
 
    public void inQueue(Object obj)    // 进队列
    {
       if(this.rear <maxSize)// 队列不满才能入队
       {         
       rear++;//将尾指针向后移动衣蛾单位
       queue[rear] = obj;  // 将数据obj放入队列
       System.out.println(obj+"入队");
                      
       }
       else
       {
    	 System.out.println("队列已满");
       }
    }
   /* 队列元素的出队是在队首进行的，所以进行出队操作要改变头指针(front),出队前先将头指针向后
           移动一个位置，然后再将该位置的元素取出*/
    public Object  OutQueue()          // 取得队列的队头元素。
    {
       Object obj=null;//声明一个变量保存要出对的数据      
       if(this.front != this.rear)
       {           // 头指针不等于尾指针，即队列不为空
          front++;
       obj=queue[front];
       System.out.println(obj+"出队");
        
       }
       else
       {
    	   System.out.println("队列为空");  
       }
       return obj;
    }
    
   /* 遍历队列要从头指针的下一个位置开始，遍历到尾指针的下一个位置，读取玩队列中的最后一个数据，
          结束条件为front==rear*/
    
    public void display(){
    	if(front!=rear){
    		for(int i=front+1;i<rear+1;i++){
    			System.out.println(queue[i]);
    		}
    	}else{
    		System.out.println("队列中无数据");
    	}
    }
 
    
    public boolean isEmpty()     // 判队列是否为空。 
    {
    	boolean empty=true;
    	if(this.front==this.rear)
    	{
    	  empty=true;	
    	}
    	else
    	{
    		empty=false;
    	}
       return empty;
     }
 
    public boolean isFull()      // 判队列是否已满 。
       {
    	boolean full=true;
    	if(this.front==(this.rear+1)%maxSize)
    	{
    	  full=true;	
    	}
    	else
    	{
    		full=false;
    	}
       return full;
       }
    
    
    /* 循环队列元素的入队
     * 我们把队列设想长一个循环表，即设想队列 的首位相连，
     * queue【0】接在queue[maxSize-1]之后，这种结构极为循环队列*/

public void inQueue1(Object obj)    // 进队列
{
  if(this.rear <maxSize)// 队列不满才能入队
  {         
  this.rear=(rear+1)%maxSize;//将尾指针向后移动衣蛾单位
  queue[rear] = obj;  // 将数据obj放入队列
  System.out.println(obj+"入队");
                 
  }
  else
  {
	 System.out.println("队列已满");
  }
}
/* 循环队列元素的出队*/
public Object  OutQueue2()          // 取得队列的队头元素。
{
  Object obj=null;//声明一个变量保存要出对的数据      
  if(this.front != this.rear) // 头指针不等于尾指针，即队列不为空
  {      
     this.front=(front+1)%maxSize;
  obj=queue[front];
  System.out.println(obj+"出队");
   
  }
  else
  {
	   System.out.println("队列为空");  
  }
  return obj;
}
 
   
    
   

 
    } 


   


